iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
自我挑戰組

IT工作中曾遇到的問題系列 第 12

利用python來將SQLite的資料轉成Word

  • 分享至 

  • xImage
  •  

python是一個優秀的程式語言,有眾多的套件,相關文件與範例也很多。

上面有一個臨時的需求,希望把SQLite內的資料抓出來並做成Word,下圖是要求的Word檔格式,要用表格,有圖片的還要秀出來
https://ithelp.ithome.com.tw/upload/images/20230915/20156403O1YsoRyn0Y.png

原本的想法是用SQL抓出資料後,再一筆一筆貼到Word上,後來想一想,不如用python試試。

首先安裝python-docx套件

pip3 install python-docx

完整python程式如下:

import sqlite3

from docx.shared import Pt

from docx import Document

document = Document()

root_path = "F:\\0_Project\\TestSystem\\app"

conn = sqlite3.connect( root_path + '\\db\\ams.db')

cur = conn.cursor()

sql01 = """
        select 
            uuid,id, name, type, status,
            custodian, custody_unit, custody_photo
        from fh_items_basic
        where status='正常'
        and type in ('PC','NB')
        order by id;
        """

sqlite_data = cur.execute(sql01) 

for row in sqlite_data :
    table = document.add_table(rows=4, cols=2,style = 'Table Grid')
     

    # 合併儲存格
    table.cell(0,0).merge(table.cell(0,1)) 

    table.cell(0,0).text = "ID:" + row[1]
    table.cell(1,0).text = "類型:" + row[3]
    table.cell(1,1).text = "狀況:" + row[4]
    table.cell(2,0).text = "保管人:" + row[5]
    table.cell(2,1).text = "保管單位:" + row[6]

    # 合併儲存格
    table.cell(3,0).merge(table.cell(3,1)) 

    if row[7] != 'NO' :
        #在 Table Cell內插入圖片
        cell_paragraph = table.cell(3,0).paragraphs[0]
        run = cell_paragraph.add_run()
        run.add_picture(root_path + '\\server\\img\\' + row[7] ,width=Inches(3.25))

    #增加段落
    paragraph = document.add_paragraph('    ')

conn.close()

# 分頁
document.add_page_break()

# 存檔
document.save('data.docx')

程式碼說明

SQLite的程式網路已經有很多的說明,在此就不另外說明

因為Word內有表格,所以使用add_table函數來產生表格,下面範例會產生一個4x2的表格

table = document.add_table(rows=4, cols=2,style = 'Table Grid')

因為表格的第一列與最後一列需要合併欄位,所以用megre將其合併,就像Excel的儲存格一樣

table.cell(0,0).merge(table.cell(0,1))
table.cell(3,0).merge(table.cell(3,1)) 

用cell(row,column).text在指定的欄位填入值

table.cell(0,0).text = "ID:" + row[1]

在表格的最後一列取出段落(paragraphs),並且用add_picture來插入圖片到段落內

cell_paragraph = table.cell(3,0).paragraphs[0]
run = cell_paragraph.add_run()
run.add_picture(root_path + '\\server\\img\\' + row[7] ,width=Inches(3.25))

執行程式後,抓出來的資料共有300多筆,還好有用python來轉出,不然一筆一筆貼上,手都要廢了。


上一篇
Oracle DB 使用網路服務時出現ORA-24247: 存取控制清單 (ACL) 拒絕網路存取
下一篇
Oracle Data Guard Archive Gap
系列文
IT工作中曾遇到的問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言